/*
 * heap.h
 *
 *  Created on: 2020年2月20日
 *      Author: Administrator
 */

#include <stdbool.h>
#include "../utils.h"

#ifndef HEAP_H_
#define HEAP_H_

#define MAX_SIZE 20
typedef enum {min_heap = 0, max_heap = 1} HeapType; // 最大堆1，最小堆0

typedef struct HNode {
	ElemType* data;  // 用数组表示堆，默认为小根堆
	int size;        // 当前大小，0表示空
} HNode, *Heap;

/**
 * 初始化堆
 * 返回值：heap
 */
void init_heap(Heap heap);
/**
 * 创建堆
 * 不断往堆中插入元素
 */
void create_heap(Heap heap, ElemType* array, int length);

bool is_full_heap(Heap heap);

bool is_empty_heap(Heap heap);
/**
 * 插入堆
 * 往堆中插入元素，再调整为最小堆
 * 堆从1号位置开始存储
 */
bool insert_heap(Heap heap, ElemType element);
/**
 * 调整为最小堆
 * 调整以root为起点的整个二叉树为最小堆结构
 */
void adjust_heap(Heap heap, int root, int end);
/**
 * 出堆
 */
ElemType deheap(Heap heap);

void heap_sort(Heap heap);

void print_heap(Heap heap);

#endif /* HEAP_H_ */
